package com.exam.service.impl;

import com.exam.dao.IMessageDao;
import com.exam.entity.Message;
import com.exam.service.MessageService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class MessageServiceImpl implements MessageService {

	@Resource
	private IMessageDao messageDao;

	/**
	 * 查询所有学生的通知
	 * @return
	 */
	@Override
	public List<Message> getAllStuMessages() {
		return messageDao.getAllStuMessages();
	}

	/**
	 * 查询所有管理员的消息
	 * @return
	 */
	@Override
	public List<Message> getAllAdminMessages() {
		return messageDao.getAllAdminMessages();
	}

	/**
	 * 接收某个学生的通知
	 * @param sno
	 * @return
	 */
	@Override
	public List<Message> receiveMessagesByNo(String sno) {
		return messageDao.receiveMessagesByNo(sno);
	}

	/**
	 * 某学生发送消息,消息状态默认为0，即未读
	 * @param sno
	 * @param content
	 * @return
	 */
	@Override
	public int sendStuMessage(String sno, String content) {
		return messageDao.sendStuMessage(sno,content);
	}

	/**
	 * 得到所有的未读消息，单个学生的编号来查询
	 * @param sno
	 * @return
	 */
	@Override
	public List<Message> getStuEverSendMessage(String sno) {
		return messageDao.getStuEverSendMessage(sno);
	}

	/**
	 * 发送通知给单个学生
	 * @param sno
	 * @param content
	 * @return
	 */
	@Override
	public int sendToSingleStu(String sno, String content) {
		return messageDao.sendToSingleStu(sno,content);
	}

	/**
	 * 通知所有学生，此处调用存储过程"notifyAll"
	 * 	存储过程如下：delimiter //
					 create procedure notifyAll(in tcontent text)
					 begin
					 declare tsno char(10);
					 declare done int default 0;
					 declare cur cursor for select sno from exam_stu;
					 declare continue handler for sqlstate '02000' set done = 1;
					 open cur;
					 fetch next from cur into tsno;
					 repeat
					 insert into message(sno,content,sendtime,mtype) values(tsno,tcontent,now(),1);
					 fetch next from cur into tsno;
					 until done end repeat;
					 close cur;
					 end//
					 delimiter ;
	 * @param content
	 */
	@Override
	public void sendToAllStu(String content) {
		messageDao.sendToAllStu(content);
	}

	/**
	 * 管理员的  已读功能
	 * @return
	 */
	@Override
	public int adminHasRead(int mid) {
		return messageDao.adminHasRead(mid);
	}

	/**
	 * 学生端的  已读功能
	 * @param sno
	 * @return
	 */
	@Override
	public int stuHasRead(String sno) {
		return messageDao.stuHasRead(sno);
	}

}
